from flask import Blueprint, request, render_template, make_response, Response, redirect, url_for
from .models import *

# 蓝图，传入蓝图名称和当前模块
blue = Blueprint('user',__name__)

@blue.route('/')
def hello_world():
    return '首页'

# 路由参数：
# string类型 可传入任意字符串
@blue.route('/get_string/<string:username>/')
def get_string(username):
    return str(username)

# int类型可传入任意整数
@blue.route('/get_int/<int:number>/')
def get_int(number):
    return str(number)

# float类型可传入任意浮点数
@blue.route('/get_float/<float:number>/')
def get_float(number):
    return str(number)

# path类型 可传入带/的字符串
@blue.route('/get_path/<path:path>/')
def get_path(path):
    return str(path)

# # 生成用于测试的数据：生成UUID
# @blue.route('/generate_uuid/')
# def generate_uuid():
#     import uuid
#     return str(uuid.uuid4())   # 输出uuid ： 933095a8-ebeb-4eb0-9a94-243d67e8e379

# uuid类型，必须传入UUID格式的字符串
@blue.route('/get_uuid/<uuid:id>/')
def get_uuid(id):
    return str(id)

# any类型，只能传入指定内容，否则报错
@blue.route('/get_any/<any(apple,orange,banana):fruit>/')
def get_any(fruit):
    return str(fruit)

# 请求方式method
@blue.route('/get_method/',methods=['GET','POST'])
def get_method():
    return str("method")

# 请求对象 methods 'GET','POST'必须大写
@blue.route('/get_request/',methods=['GET','POST'])
def get_request():
    print('请求方法：',request.method)
    print('请求URL：',request.url)
    print('GET请求参数：',request.args)
    print('POST请求参数',request.form)
    print('请求头：',request.headers)
    print('COOKIES：',request.cookies)
    print('上传文件：',request.files)

    return str("你好啊")

# Response自定义响应
@blue.route('/get_response/',methods=['GET','POST'])
def get_response():
    html = render_template("get_response.html",name='张三',age=11)
    # res = make_response(html,200)
    res = Response(html)
    return res

# 重定向
@blue.route('/make_redirect/',methods=['GET','POST'])
def make_redirect():
    # return redirect("http://www.baidu.com/")

    # url_for(蓝图名称.视图函数名称)
    ret = url_for('user.get_request',name='王五',age=88) #反向解析
    return redirect(ret)